home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / p4 / p4-1_2b.lha / p4-1.2b / monitors / addtwo.gs.c < prev    next >
C/C++ Source or Header  |  1993-02-05  |  1KB  |  77 lines

  1. #include "p4.h"
  2.  
  3. #define MAXLEN 500
  4. #define MAXPROCS 256
  5.  
  6.  
  7. struct globmem {
  8.     int length;
  9.     int a[MAXLEN], b[MAXLEN], c[MAXLEN];
  10.     int num_added[MAXPROCS];
  11.     p4_barrier_monitor_t barrier;
  12.     p4_getsub_monitor_t getsub;
  13. } *glob;
  14.  
  15.  
  16. slave()
  17. {
  18.     work();
  19. }
  20.  
  21. main(argc,argv)
  22. int  argc;
  23. char **argv;
  24. {
  25. int i, j, n;
  26.  
  27.     p4_initenv(&argc,argv);
  28.  
  29.     glob = (struct globmem *) p4_shmalloc(sizeof(struct globmem));
  30.  
  31.     p4_barrier_init(&(glob->barrier));
  32.     p4_getsub_init(&(glob->getsub));
  33.  
  34.     /* read in the length and the two vectors */
  35.     scanf("%d",&glob->length);
  36.     for (i = 0; i < glob->length; i++)
  37.     scanf("%d",&glob->a[i]);
  38.     for (i = 0; i < glob->length; i++)
  39.     scanf("%d",&glob->b[i]);
  40.     
  41.     p4_create_procgroup();
  42.     if (p4_get_my_id() != 0)
  43.     {
  44.     slave();
  45.     exit(0);
  46.     }
  47.  
  48.     work();
  49.     /* print the answer */
  50.     for (i = 0; i < glob->length;) 
  51.     {
  52.     for (j = 0; (j < 9) && (i < glob->length); j++)
  53.         printf("%d\t", glob->c[i++]);
  54.     printf("\n");
  55.     }
  56.     for (i = 0, n = p4_num_total_ids(); i < n; i++)
  57.     printf("num by %d = %d \n",i,glob->num_added[i]);
  58.  
  59.     p4_wait_for_end();
  60. }
  61.  
  62. work()
  63. {
  64. int i, myid, nprocs;
  65.  
  66.     myid = p4_get_my_id();
  67.     glob->num_added[myid] = 0;
  68.     nprocs = p4_num_total_ids();
  69.     p4_barrier(&(glob->barrier),nprocs);
  70.     p4_getsub(&(glob->getsub),&i,glob->length - 1,nprocs);
  71.     while (i >= 0) {
  72.     glob->c[i] = glob->a[i] + glob->b[i];
  73.     glob->num_added[myid]++;
  74.     p4_getsub(&(glob->getsub),&i,glob->length - 1,nprocs);
  75.     }
  76. }
  77.